ElasticSearch 增删查改
[TOC]
ElasticSearch 增删查改
定义 mapping 类型
PUT /book
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"clike":{
"type": "integer"
},
"create_date":{
"type": "date"
}
}
}
}
获取 book 的mapping信息
GET /book2/_mapping
keyword
类型 不会被分词器解析
通过GET _cat
可以获取很多信息
GET _cat/indices
创建
POST 和 PUT 都可以
修改
- PUT 是创建和覆盖数据
提交的数据会把原来的数据覆盖。
- POST 是修改数据
提交的数据会修改原数据。 PUT 和 POST 修改数据的区别是,PUT提交的内容会替换原来所有的数据。POST提交的只修改提交的内容,其他内容不变。
查询
高亮搜索结果
GET /lib3/user/_search
{
"query": {
"match": {
"interests": "changge"
}
},
"highlight": {
"fields": {
"interests": {}
}
}
}
# 查询所有文档,不管是哪个索引下的
GET _search
# 查询lib索引下所有文档
GET /lib/_search
# 指定lib、lib3索引下的所有文档
GET /lib,lib3/_search
# *号为通配符,查询结尾是3和4的索引下的所有文档
GET /*3,*4/_search
# 可以指定类型type,(6.0以后一个_index下只能有一个_type,等价于GET /lib/_search)
GET /lib/user/_search
# 指定多个索引,多个类型,(6.0以后一个_index下只能有一个_type,等价于GET /lib,lib3/_search)
GET /lib,lib3/user,items/_search
# _all表示集群下的所有索引
GET /_all/_search
# 查询所有索引下,只查询user、items类型的文档
GET /_all/user,items/_search
返回版本号
version:当设置version为true时,查询的文档中将返回版本信息,默认情况是false(即不设置的version时)
GET /lib3/user/_search
{
"version": true,
"query": {
"terms": {
"interests": ["hejiu", "changge"]
}
}
}
term查询和terms查询
term query回去倒排索引中寻找确切的term(即精准查询),它并不知道分词器的存在。这种查询适合keyword,numeric,date。
- term:查询某个字段里含有某个关键词的文档
GET /lib3/user/_search
{
"query": {
"term": {
"interests": "changge"
}
}
}
- terms:查询某个字段里含有多个关键字的文档
GET /lib3/user/_search
{
"query": {
"terms": {
"interests": ["hejiu", "changge"] # 这里多个条件是或(即or)的关系
}
}
}
控制加载的字段
- includes:包含某些字段,可以使用通配符进行查询
- excludes:排除某些字段,可以使用通配符进行查询
GET /lib3/user/_search
{
"_source": {
"includes": ["name", "address"],
"excludes": ["age", "birthday"]
},
"query": {
"match_all": {}
}
}
使用通配符查询
GET /lib3/user/_search
{
"_source": {
"includes": ["addr*"],
"excludes": ["name", "bir*"]
},
"query": {
"match_all": {}
}
}
wildcard查询
允许使用通配符 * 和 ? 来进行查询
- *:代表0个或者多个字符
- ?:代表任意一个字符
GET /lib3/user/_search
{
"query": {
"wildcard": {
"name": "zhao*"
}
}
}
GET /lib3/user/_search
{
"query": {
"wildcard": {
"name": "li?i"
}
}
}
fuzzy实现模糊查询
- value:查询的关键字
- boost:查询的权值,默认值是1.0
- min_similarity:设置匹配的最小相似度,默认值为0.5,对于字符串,取值为0-1(包含0和1);对于数值,取值可能大于1;对于日期类型取值为1d,1m等,1d就代表1天
- prefix_length:指明区分词项的共同前缀长度,默认是0
- max_expansions:查询中的词项可以扩展的数目,默认可以无限大
GET /lib3/user/_search
{
"query": {
"fuzzy": {
"interests": "changge"
}
}
}
GET /lib3/user/_search
{
"query": {
"fuzzy": {
"interests": {
"value": "chagge" # 此处changge写成了chagge,但因为模糊查询依然可以查出结果
}
}
}
}
范围查询
range:实现范围查询
==参数:from、to、include_lower、include_upper、boost==
- include_lower:是否包含范围的左边界,默认是true
- include_upper:是否包含范围的右边界,默认是true
GET /lib3/user/_search
{
"query": {
"range": {
"birthday": {
"from": "1990-10-10",
"to": "2018-05-01"
}
}
}
}
GET /lib3/user/_search
{
"query": {
"range": {
"age": {
"from": 20,
"to": 25,
"include_lower": true,
"include_upper": false
}
}
}
}
match查询
match query知道分词器的存在,会对filed进行分词操作,然后在查询
GET /lib3/user/_search
{
"query": {
"match": {
"name": "zhaoliu"
}
}
}
# 分词的体现
# 匹配的条件越多,相似度的值将会越高
GET /lib3/user/_search
{
"query": {
"match": {
"name": "zhaoliu zhaoming"
}
}
}
GET /lib3/user/_search
{
"query": {
"match": {
"age": 20
}
}
}
- match_all:查询所有文档
GET /lib3/user/_search
{
"query": {
"match_all": {}
}
}
- multi_match:可以指定多个字段
GET /lib3/user/_search
{
"query": {
"multi_match": {
"query": "lvyou",
"fields": [
"interests",
"name"
]
}
}
}
match_phrase:短语匹配查询
Elasticsearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变;
GET /lib3/user/_search
{
"query": {
"match_phrase": {
"interests": "duanlian, shuoxiangsheng"
}
}
}
排序
使用sort实现排序:
- desc降序
- asc升序
GET /lib3/user/_search
{
"sort": [
{
"age": {
"order": "asc"
}
}
],
"query": {
"match_all": {}
}
}
查询结果分析
- took:查询耗费的时间,单位是毫秒
- _shard:共请求了多少个shard
- total:查询出的文档总个数
- max_score:本次查询中,相关度分数的最大值,文档和此次查询的匹配度越高,_score的值越大,排位越靠前
- hits:默认查询前10个文档
- time_out: 查询超时时间,设置超时时间将返回已经查询出来的数据
GET /lib3/user/_search?timeout=10ms
{
"_source": [
"address",
"name"
],
"query": {
"match": {
"interests": "changge"
}
}
}
{
"took": 419,
"time_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.6931472,
"hits": [
{
"_index": "lib3",
"_type": "user",
"_id": "3",
"_score": 0.6931472,
"_source": {
"address": "bei jing hai dian qu qing he zhen",
"name": "lisi"
}
},
{
"_index": "lib3",
"_type": "user",
"_id": "2",
"_score": 0.47000363,
"_source": {
"address": "bei jing hai dian qu qing he zhen",
"name": "lisi"
}
}
]
}
}
分页查询 (from, size)
- from 偏移,默认为0
- size 返回的结果数,默认为10
curl -XGET 'localhost:9200/index/type/_search?pretty' -d '
{
"query": { "match_all": {} },
"from":1,
"size":2
}'